//package com.woniuxy.controller;
//
//import com.woniuxy.dao.ShopOrderItemsDao;
//import com.woniuxy.entity.ShopOrderItems;
//import com.woniuxy.entity.Storage;
//import com.woniuxy.feignclient.StorageFeignClient;
//import io.seata.spring.annotation.GlobalTransactional;
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.TimeUnit;
//
//@Component
//public class SeckillConsumer {
//    // 模拟库存服务（实际可注入 Mapper/Feign 调用）
//    @Autowired
//    private RedissonClient redissonClient;
//    @Autowired
//    private ShopOrderItemsDao shopOrderItemsDao;
//    @Autowired
//    StorageFeignClient storageFeignClient;
//    // 监听队列，自动消费消息
//    @RabbitListener(queues = "seckill.order.queue")
//    @GlobalTransactional
////    @Transactional(rollbackFor = Exception.class)
//    public void processSeckill(List<ShopOrderItems> itemsList) {
//        System.out.println("消费者开始消费"+itemsList);
//        RLock lock = redissonClient.getLock("myLock");
//        try {
//            // 加锁（最长等待30秒，自动释放锁时间10秒）
//            lock.tryLock(30, 10, TimeUnit.SECONDS);
//            // 业务逻辑
//                // 创建一个List<Storage>集合来存储所有Storage对象
//                List<Storage> storageList = new ArrayList<>();
//                // 遍历列表，逐个插入（或使用更高效的批量插入）
//                for (ShopOrderItems item : itemsList) {
//                    shopOrderItemsDao.insert(item);
//                    // 创建Storage对象并添加到集合中
//                    Storage storage = new Storage(null, item.getProductId(), item.getQuantity());
//                    storageList.add(storage);
//                }
//                // 远程调用扣减库存
//                storageFeignClient.deduct(storageList);
////                return itemsList;
//        } catch (InterruptedException e) {
//            Thread.currentThread().interrupt();
//        } finally {
//            // 释放锁
//            if (lock.isHeldByCurrentThread()) {
//                lock.unlock();
//            }
//        }
//    }
//
////        try {
////            // 模拟业务处理耗时（如查库存、扣库存、创建订单）
//////            TimeUnit.MILLISECONDS.sleep(100);
////            // 1. 校验库存（真实场景应查 Redis/DB）
//////            if (stock <= 0) {
//////                System.out.println("商品已售罄，用户：" + request.getUserId());
//////                return;
//////            }
////            // 2. 扣库存（这里仅模拟，实际需操作数据库/Redis）
////            stock--;
////            // 3. 生成订单（省略实际订单逻辑，如调用订单服务）
//////            System.out.println("秒杀成功！用户：" + request.getUserId()
//////                    + "，商品：" + request.getProductId()
//////                    + "，剩余库存：" + stock);
////
////        } catch (InterruptedException e) {
////            // 处理线程中断异常
////            Thread.currentThread().interrupt();
////            System.err.println("秒杀处理被中断：" + e.getMessage());
////        } catch (Exception e) {
////            // 捕获其他异常，记录日志并回滚
////            System.err.println("秒杀处理失败：" + e.getMessage());
////            throw new RuntimeException("秒杀处理异常", e);
////        }
////    }
//}